package ocio.actions;  

import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import java.util.Map;

import ocio.beans.Provincia;
import ocio.beans.Subtipo;
import ocio.services.ProvinciaService;
import ocio.services.SubtipoService;
import ocio.services.ServiceLocator;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * Clase destinataria de la petición de listas de provincias y subtipos para 
 * el relleno de combos en formularios.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Provincia
 * @see ocio.beans.Subtipo
 */
public class RellenaProvinciasYSubtiposAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	
	private List<Provincia> listaProvincias = new ArrayList<Provincia>();
	private List<Subtipo> listaSubtiposFiltrada = new ArrayList<Subtipo>();
	
   /**
	 * Método execute() de la clase ActionSupport de Struts 2. 
	 * Solicita los servicios para recuperar las provincias de la base de datos y una lista
	 * de subtipos en función de un tipo dado. Las listas se usarán para rellenar los combos de un formulario.
	 * @return un string que indica la respuesta de la acción ejecutada sobre la petición del usuario.
	 */
	public String execute(){

		ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
		ProvinciaService pS = (ProvinciaService)serviceLocator.getService("Provincia");
		SubtipoService sS=(SubtipoService)serviceLocator.getService("Subtipo");
		
		listaProvincias= pS.ListAllProvincias();
	
		Map<String,Object> sesion = ActionContext.getContext().getSession();
		if (sesion.get("ROL")=="Admin"){
			listaSubtiposFiltrada= sS.ListAllSubtipos();
		} else {  //Caso proveedor
			Subtipo subtipo = new Subtipo();
			subtipo.setTipo((Integer)sesion.get("TIPOPROVEEDOR"));
			Iterator<Object> it3 = sS.searchByFields(subtipo).iterator();
			 while(it3.hasNext()) {
		         subtipo = (Subtipo) it3.next();
		         listaSubtiposFiltrada.add(subtipo);
			}
		}
		
		if (listaProvincias!=null) {
					return "success";
				}else{
					return "fail";
			    }
					
	}


	public List<Provincia> getListaProvincias() {
		return listaProvincias;
	}

	public void setListaProvincias(List<Provincia> listaProvincias) {
		this.listaProvincias = listaProvincias;
	}
	
	public List<Subtipo> getListaSubtiposFiltrada() {
		return listaSubtiposFiltrada;
	}

	public void setListaSubtiposFiltrada(List<Subtipo> listaSubtiposFiltrada) {
		this.listaSubtiposFiltrada = listaSubtiposFiltrada;
	}
}
